package demo3;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class Person {
    /*
        @Autowired注解，告知容器，这个属性需要容器进行设置。
        只要该属性对应的对象也在容器中，那么容器在初始化时就会将其设置给该属性。

        这种将当前类需要的“依赖”在当前对象初始化时由容器将其"注入"到属性中完成初始化的过程
        称为"依赖注入"，以此构建当前对象与依赖对象的关系。
     */
    @Autowired
    @Qualifier("summer")
//    private Shirt shirt;
//    private Sweater sweater;
    private Clothes clothes;

    public void play(){
        //穿上一件衣服
        /*
            当前类Person中的方法play在实现的过程中使用到了Shirt的wear方法完成部分功能，
            此时Person就依赖与Shirt.
            我们此前的编码习惯是，当我们依赖某个类的功能时，我们都是主动实例化对象。
            使用Spring容器后，我们可以改为由容器管理依赖。
            如果当前类(demo8.Person)和依赖的类(Shirt)都受容器管理，那么当前类Person在需要依赖
            Shirt时，可以将Shirt作为属性定义在Person中，并由容器创建Person时将Shirt设置
            给Person，完成依赖关系。
         */
//        Shirt shirt = new Shirt();
//        shirt.wear();
//        sweater.wear();
        clothes.wear();


        Object obj = new Shirt();

        //玩
        System.out.println("出去玩");
    }
}
